library(dplyr)
library(ggplot2)
library(ggrepel)
library(GOplot)
Loading required package: ggdendro
Loading required package: gridExtra

Attaching package: ‘gridExtra’

The following object is masked from ‘package:dplyr’:

    combine

Loading required package: RColorBrewer

GO bubble plot

circ <- circle_dat(terms, genes)
Error in circle_dat(terms, genes) : could not find function "circle_dat"
terms <- create_terms(gsea)
genes <- create_genes(genelist)
circ <- circle_dat(terms, genes)
GOBubble_modified <- function(data, display, title, colour, labels, ID = T, table.legend = T, table.col = T, bg.col = F, zscore_threshold=0, ggrepel_linecol='black', text_size_axes=20, text_size_axes_label=20, text_size=10, text_size_legend=7, text_size_threshold=10, legend_point_size=20){
  zscore <- adj_pval <- category <- count <- id <- term <- NULL
  if (missing(display)) display <- 'single'
  if (missing(title)) title <- ''
  if (missing(colour)) cols <- c("chartreuse4", "brown2", "cornflowerblue") else cols <- colour
  if (missing(labels)) labels <- 5
  if (bg.col == T & display == 'single') cat("Parameter bg.col will be ignored. To use the parameter change display to 'multiple'")
  
  colnames(data) <- tolower(colnames(data))
  tmp_lab <- data.frame(cats = c('Biological Process', 'Cellular Component', 'Molecular Function'), 
                        cat.abb = c('BP', 'CC', 'MF'),
                        locy = c(match('BP', data$category), match('CC', data$category), match('MF', data$category)),
                        cols = cols,
                        stringsAsFactors = F)
  tmp_lab <- tmp_lab[order(tmp_lab$locy),]
  if(!'count'%in%colnames(data)){
    rang <- c(5, 5)
    data$count <- rep(1, dim(data)[1])
  }else {rang <- c(1, 30)}
  data$adj_pval <- -log(data$adj_pval, 10)
  sub <- data[!duplicated(data$term), ]
  g <- ggplot(sub, aes(zscore, adj_pval, fill = category, size = count))+
    labs(title = title, x = 'z-score', y = '-log (adj p-value)')+
    geom_point(shape = 21, col = 'black', alpha = 1 / 2)+ #add all bubbles
    geom_hline(yintercept = 1.3, col = 'orange')+ #add threshold for p-value=0.05
    scale_size(range = rang, guide = 'none') +
    scale_y_continuous(limits=c(0,45))
  
  sub2 <- subset(sub, subset=sub$adj_pval >= labels)
  sub2 <- subset(sub2, subset=abs(sub2$zscore) >= zscore_threshold)

    g <- g + scale_fill_manual('', values = tmp_lab$cols, labels = tmp_lab$cats)+
      theme(legend.position = 'right', legend.key.size = unit(1, 'cm'), legend.title=element_text(face='bold')) +
      guides(fill = guide_legend(override.aes = list(size=legend_point_size)))
      annotate ("text", x = 0.6, y = 2.2, label = "Threshold", colour = "orange", size = text_size_threshold)
    g <- g + geom_text_repel(data = sub2, aes(x = zscore, y = adj_pval, label = term), size = text_size, segment.color = ggrepel_linecol)
    g <-  g + 
        theme(axis.text = element_text(size = text_size_axes), axis.line = element_line(colour = 'grey80'), axis.ticks = element_line(colour = 'grey80'), axis.title = element_text(size = text_size_axes_label, face = 'bold'), panel.background = element_blank(), panel.grid.minor = element_blank(), panel.grid.major = element_blank(), plot.background = element_blank(), legend.text=element_text(size=text_size_legend), legend.title=element_text(size=text_size_legend))
 return(g)
}

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KEdPcGxvdCkKYGBgCgoKIyNHTyBidWJibGUgcGxvdAoKCgpgYGB7cn0KbmFtZSA8LSAnaGVhdG1hcF9sb2dGQzAuM19uY2x1c3RlcjYnCmZvbGRlciA8LSBwYXN0ZSgnLi4vdGFibGVzL3RhYmxlc19wYXBlci9hbGxfdGFibGVzL0JFQU0vJywgbmFtZSwgc2VwPScnKQojY2x1c3RlcnMgPC0gYygxLDIsMyw0LDYpCmNsdXN0ZXJzIDwtIGMoMiw2LDMpCmdzZWEgPC0gbGlzdCgpCmdlbmVsaXN0IDwtIGxpc3QoKQoKZm9yIChpIGluIGNsdXN0ZXJzKXsKICBnc2VhX2NsdXN0ZXIgPC0gcmVhZC50YWJsZShwYXN0ZShmb2xkZXIsICcvUkVWSUdPX2NsZWFuZWQvJywgJ1JFVklHT19jbHVzdGVyJywgaSwgJ19jbGVhbmVkLnRzdicsIHNlcD0nJyksIGhlYWRlcj1UKQogIGdzZWFfY2x1c3RlclsnY2x1c3RlciddIDwtIGkKICBnZW5lc19jbHVzdGVyIDwtIHJlYWQudGFibGUocGFzdGUoZm9sZGVyLCAnL2dlbmVsaXN0X2NsdXN0ZXInLCBpLCAnLnRzdicsIHNlcD0nJyksIGhlYWRlcj1UKQogIGdzZWFbW2ldXSA8LSBnc2VhX2NsdXN0ZXIKICBnZW5lbGlzdFtbaV1dIDwtIGdlbmVzX2NsdXN0ZXIKfQoKZ3NlYSA8LSBkby5jYWxsKCJyYmluZCIsIGdzZWEpCmdlbmVsaXN0IDwtIGRvLmNhbGwoInJiaW5kIiwgZ2VuZWxpc3QpCgpjcmVhdGVfdGVybXMgPC0gZnVuY3Rpb24oZ3NlYSl7CiAgcmV0dXJuKGRhdGEuZnJhbWUoY2F0ZWdvcnk9Z3NlYSRnc2VhLmRvbWFpbiwgSUQ9Z3NlYSRyZXZpZ28udGVybV9JRCwgdGVybT1nc2VhJHJldmlnby5kZXNjcmlwdGlvbiwgYWRqX3B2YWw9Z3NlYSRnc2VhLnAudmFsdWUsIGdlbmVzPWdzZWEkZ3NlYS5pbnRlcnNlY3Rpb24sIGNsdXN0ZXI9Z3NlYSRjbHVzdGVyKSkKfQoKY3JlYXRlX2dlbmVzIDwtIGZ1bmN0aW9uKGdlbmVsaXN0KXsKICByZXR1cm4oZGF0YS5mcmFtZShJRD1nZW5lbGlzdCRnZW5lX3Nob3J0X25hbWUsIGxvZ0ZDPWdlbmVsaXN0JGF2Z0xvZ0ZDX1N0YXRlMl9TdGF0ZTMpKQp9CmBgYAoKCmBgYHtyfQp0ZXJtcyA8LSBjcmVhdGVfdGVybXMoZ3NlYSkKZ2VuZXMgPC0gY3JlYXRlX2dlbmVzKGdlbmVsaXN0KQpjaXJjIDwtIGNpcmNsZV9kYXQodGVybXMsIGdlbmVzKQpgYGAKCgpgYGB7cn0KR09CdWJibGVfbW9kaWZpZWQgPC0gZnVuY3Rpb24oZGF0YSwgZGlzcGxheSwgdGl0bGUsIGNvbG91ciwgbGFiZWxzLCBJRCA9IFQsIHRhYmxlLmxlZ2VuZCA9IFQsIHRhYmxlLmNvbCA9IFQsIGJnLmNvbCA9IEYsIHpzY29yZV90aHJlc2hvbGQ9MCwgZ2dyZXBlbF9saW5lY29sPSdibGFjaycsIHRleHRfc2l6ZV9heGVzPTIwLCB0ZXh0X3NpemVfYXhlc19sYWJlbD0yMCwgdGV4dF9zaXplPTEwLCB0ZXh0X3NpemVfbGVnZW5kPTcsIHRleHRfc2l6ZV90aHJlc2hvbGQ9MTAsIGxlZ2VuZF9wb2ludF9zaXplPTIwKXsKICB6c2NvcmUgPC0gYWRqX3B2YWwgPC0gY2F0ZWdvcnkgPC0gY291bnQgPC0gaWQgPC0gdGVybSA8LSBOVUxMCiAgaWYgKG1pc3NpbmcoZGlzcGxheSkpIGRpc3BsYXkgPC0gJ3NpbmdsZScKICBpZiAobWlzc2luZyh0aXRsZSkpIHRpdGxlIDwtICcnCiAgaWYgKG1pc3NpbmcoY29sb3VyKSkgY29scyA8LSBjKCJjaGFydHJldXNlNCIsICJicm93bjIiLCAiY29ybmZsb3dlcmJsdWUiKSBlbHNlIGNvbHMgPC0gY29sb3VyCiAgaWYgKG1pc3NpbmcobGFiZWxzKSkgbGFiZWxzIDwtIDUKICBpZiAoYmcuY29sID09IFQgJiBkaXNwbGF5ID09ICdzaW5nbGUnKSBjYXQoIlBhcmFtZXRlciBiZy5jb2wgd2lsbCBiZSBpZ25vcmVkLiBUbyB1c2UgdGhlIHBhcmFtZXRlciBjaGFuZ2UgZGlzcGxheSB0byAnbXVsdGlwbGUnIikKICAKICBjb2xuYW1lcyhkYXRhKSA8LSB0b2xvd2VyKGNvbG5hbWVzKGRhdGEpKQogIHRtcF9sYWIgPC0gZGF0YS5mcmFtZShjYXRzID0gYygnQmlvbG9naWNhbCBQcm9jZXNzJywgJ0NlbGx1bGFyIENvbXBvbmVudCcsICdNb2xlY3VsYXIgRnVuY3Rpb24nKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdC5hYmIgPSBjKCdCUCcsICdDQycsICdNRicpLAogICAgICAgICAgICAgICAgICAgICAgICBsb2N5ID0gYyhtYXRjaCgnQlAnLCBkYXRhJGNhdGVnb3J5KSwgbWF0Y2goJ0NDJywgZGF0YSRjYXRlZ29yeSksIG1hdGNoKCdNRicsIGRhdGEkY2F0ZWdvcnkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgY29scyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGKQogIHRtcF9sYWIgPC0gdG1wX2xhYltvcmRlcih0bXBfbGFiJGxvY3kpLF0KICBpZighJ2NvdW50JyVpbiVjb2xuYW1lcyhkYXRhKSl7CiAgICByYW5nIDwtIGMoNSwgNSkKICAgIGRhdGEkY291bnQgPC0gcmVwKDEsIGRpbShkYXRhKVsxXSkKICB9ZWxzZSB7cmFuZyA8LSBjKDEsIDMwKX0KICBkYXRhJGFkal9wdmFsIDwtIC1sb2coZGF0YSRhZGpfcHZhbCwgMTApCiAgc3ViIDwtIGRhdGFbIWR1cGxpY2F0ZWQoZGF0YSR0ZXJtKSwgXQogIGcgPC0gZ2dwbG90KHN1YiwgYWVzKHpzY29yZSwgYWRqX3B2YWwsIGZpbGwgPSBjYXRlZ29yeSwgc2l6ZSA9IGNvdW50KSkrCiAgICBsYWJzKHRpdGxlID0gdGl0bGUsIHggPSAnei1zY29yZScsIHkgPSAnLWxvZyAoYWRqIHAtdmFsdWUpJykrCiAgICBnZW9tX3BvaW50KHNoYXBlID0gMjEsIGNvbCA9ICdibGFjaycsIGFscGhhID0gMSAvIDIpKyAjYWRkIGFsbCBidWJibGVzCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxLjMsIGNvbCA9ICdvcmFuZ2UnKSsgI2FkZCB0aHJlc2hvbGQgZm9yIHAtdmFsdWU9MC4wNQogICAgc2NhbGVfc2l6ZShyYW5nZSA9IHJhbmcsIGd1aWRlID0gJ25vbmUnKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzPWMoMCw0NSkpCiAgCiAgc3ViMiA8LSBzdWJzZXQoc3ViLCBzdWJzZXQ9c3ViJGFkal9wdmFsID49IGxhYmVscykKICBzdWIyIDwtIHN1YnNldChzdWIyLCBzdWJzZXQ9YWJzKHN1YjIkenNjb3JlKSA+PSB6c2NvcmVfdGhyZXNob2xkKQoKICAgIGcgPC0gZyArIHNjYWxlX2ZpbGxfbWFudWFsKCcnLCB2YWx1ZXMgPSB0bXBfbGFiJGNvbHMsIGxhYmVscyA9IHRtcF9sYWIkY2F0cykrCiAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdyaWdodCcsIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMSwgJ2NtJyksIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoZmFjZT0nYm9sZCcpKSArCiAgICAgIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3Qoc2l6ZT1sZWdlbmRfcG9pbnRfc2l6ZSkpKQogICAgICBhbm5vdGF0ZSAoInRleHQiLCB4ID0gMC42LCB5ID0gMi4yLCBsYWJlbCA9ICJUaHJlc2hvbGQiLCBjb2xvdXIgPSAib3JhbmdlIiwgc2l6ZSA9IHRleHRfc2l6ZV90aHJlc2hvbGQpCiAgICBnIDwtIGcgKyBnZW9tX3RleHRfcmVwZWwoZGF0YSA9IHN1YjIsIGFlcyh4ID0genNjb3JlLCB5ID0gYWRqX3B2YWwsIGxhYmVsID0gdGVybSksIHNpemUgPSB0ZXh0X3NpemUsIHNlZ21lbnQuY29sb3IgPSBnZ3JlcGVsX2xpbmVjb2wpCiAgICBnIDwtICBnICsgCiAgICAgICAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSB0ZXh0X3NpemVfYXhlcyksIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAnZ3JleTgwJyksIGF4aXMudGlja3MgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gJ2dyZXk4MCcpLCBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSB0ZXh0X3NpemVfYXhlc19sYWJlbCwgZmFjZSA9ICdib2xkJyksIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9dGV4dF9zaXplX2xlZ2VuZCksIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT10ZXh0X3NpemVfbGVnZW5kKSkKIHJldHVybihnKQp9CmBgYAoKYGBge3IsIGZpZy5oZWlnaHQgPSA3LCBmaWcud2lkdGggPSAyMCwgZmlnLmFsaWduID0gImNlbnRlciJ9CnAgPC0gR09CdWJibGVfbW9kaWZpZWQoY2lyYywgbGFiZWxzPTIsIElEPUYsIHRhYmxlLmxlZ2VuZCA9IEYsIHpzY29yZV90aHJlc2hvbGQ9NC41LCBnZ3JlcGVsX2xpbmVjb2w9J3RyYW5zcGFyZW50JywgdGV4dF9zaXplX2F4ZXM9MTUsIHRleHRfc2l6ZV9heGVzX2xhYmVsPTE1LCB0ZXh0X3NpemU9NC41LCB0ZXh0X3NpemVfbGVnZW5kPTE1LCB0ZXh0X3NpemVfdGhyZXNob2xkPTUsIGxlZ2VuZF9wb2ludF9zaXplPTE1KQpwCmBgYAoK